package com.example.myapplication

import android.graphics.Color
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import androidx.recyclerview.widget.RecyclerView
import com.example.cardgame.model.CardMatchingGame

class CardAdapter(val game: CardMatchingGame) : RecyclerView.Adapter<CardAdapter.ViewHolder>() {

    // ViewHolder 内部类，持有卡片视图组件
    class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val cardButton: Button = itemView.findViewById(R.id.button) // 绑定卡片按钮
    }
    // 点击事件监听器（修正方法名，与Fragment调用保持一致）
    private var clickListener: ((Int) -> Unit)? = null
    // 提供外部设置点击监听的方法（修正方法名，匹配Fragment中的调用）
    fun setOnClickListener(listener: (Int) -> Unit) {
        clickListener = listener
    }
    // 创建ViewHolder（加载卡片布局）
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(R.layout.item_layout, parent, false)
        return ViewHolder(view)
    }
    // 获取卡片总数（与游戏中的卡片数量一致）
    override fun getItemCount(): Int {
        return game.cards.size
    }
    // 绑定数据到ViewHolder（根据卡片状态更新UI）
    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val card = game.cardAtIndex(position) // 获取当前位置的卡片

        // 已匹配的卡片不可点击，未匹配的卡片可点击
        holder.cardButton.isEnabled = !card.isMatched
        // 根据卡片状态更新显示内容和样式
        when {
            card.isMatched -> {
                // 已匹配的卡片：显示内容，固定背景色（例如灰色表示已匹配）
                holder.cardButton.text = card.toString()
                holder.cardButton.setBackgroundColor(Color.LTGRAY)
            }
            card.isChosen -> {
                // 已选中的卡片：显示内容，白色背景
                holder.cardButton.text = card.toString()
                holder.cardButton.setBackgroundColor(Color.WHITE)
            }
            else -> {
                // 未选中的卡片：隐藏内容，显示默认卡片背景
                holder.cardButton.text = ""
                holder.cardButton.setBackgroundResource(R.drawable.photo) // 确保资源存在
            }
        }
        // 绑定卡片点击事件（回调到Fragment处理游戏逻辑）
        holder.cardButton.setOnClickListener {
            clickListener?.invoke(position)
        }
    }
}